C语言调试技巧与故障排查实战

📚 共计 30 章节
01
调试基础:GDB入门与核心概念
从零掌握GDB启动、运行与基本调试流程
GDB入门
02
断点艺术:普通断点、条件断点与硬件断点
灵活运用断点,精准定位代码位置
断点条件断点
03
单步追踪:step into、step over与step out
逐行执行,深入函数调用与返回
单步step
04
变量侦探:print、display与watch的妙用
实时监控变量变化,快速揪出异常赋值
变量watch
05
内存透视:x命令与内存布局分析
直接查看内存,理解数据在地址中的排布
内存x命令
06
调用栈回溯:bt、frame与up/down命令详解
还原函数调用链,定位崩溃源头
栈回溯bt
07
多线程调试:线程切换与死锁定位
分析多线程竞争,破解死锁与数据竞争
多线程死锁
08
Core Dump分析:从崩溃现场还原真相
加载core文件,事后分析程序崩溃原因
Core Dump崩溃
09
内存泄漏排查:Valgrind与AddressSanitizer实战
检测泄漏、越界,让内存错误无处遁形
ValgrindASan
10
段错误(Segmentation Fault)根因分析
从信号到地址,彻底搞懂段错误
段错误SIGSEGV
11
野指针与悬空指针:从原理到调试
识别非法指针,避免未定义行为
野指针悬空
12
缓冲区溢出:Stack Smashing的检测与防护
栈保护机制与溢出调试技巧
溢出Stack Smash
13
逻辑错误调试:二分法与断言的艺术
缩小问题范围,用断言快速验证假设
逻辑断言
14
浮点异常调试:NaN与Inf的追踪
捕获非法浮点运算,定位精度问题
浮点NaN
15
宏与内联函数的调试陷阱
展开宏、内联函数对调试的影响及对策
内联
16
递归调试:栈溢出与无限递归的排查
监控调用深度,防止栈空间耗尽
递归栈溢出
17
静态分析:PC-Lint与Clang Static Analyzer
不运行代码,发现潜在缺陷
静态分析PC-Lint
18
动态分析:Coverity与Klocwork入门
企业级动态分析工具实战
CoverityKlocwork
19
性能调试:perf与gprof热点分析
定位CPU热点,优化程序性能
perfgprof
20
死锁与竞态条件:ThreadSanitizer实战
检测数据竞争与死锁,保证线程安全
TSan竞态
21
信号处理调试:SIGSEGV、SIGABRT的捕获
自定义信号处理,优雅捕获异常
信号SIGABRT
22
库依赖问题:ldd与LD_PRELOAD调试技巧
解决动态库缺失、版本冲突
lddLD_PRELOAD
23
Makefile调试:隐式规则与变量展开
排查构建问题,理解make行为
Makefile隐式规则
24
链接错误:undefined reference与多重定义
解决链接器报错,正确组织符号
链接undefined
25
嵌入式调试:JTAG与OpenOCD实战
硬件调试器连接与裸机调试
JTAGOpenOCD
26
远程调试:gdbserver与交叉编译环境
跨设备调试,解决嵌入式/服务器问题
gdbserver远程
27
日志驱动调试:syslog与自定义日志框架
善用日志,让程序行为可追溯
syslog日志
28
逆向调试:rr与UndoDB的时间旅行
回放执行,逆向定位bug根源
rrUndoDB
29
调试器扩展:GDB Python脚本自动化
编写自定义命令,提升调试效率
PythonGDB扩展
30
综合实战:从崩溃到修复的完整案例
融合所有技巧,解决真实世界bug
实战综合